<!DOCTYPE html>
<!-- saved from url=(0127)https://docs.google.com/document/d/e/2PACX-1vRGBkrHS0QSf7sT394S1NQGNInmTCgZXNgGxX0maeAHG_61nYjJ_eyb_fykST60ytLiu-mbjuK7t-Za/pub -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>WebPerfWG call - March 26 2020</title><link rel="shortcut icon" href="https://ssl.gstatic.com/docs/documents/images/kix-favicon7.ico"><meta name="referrer" content="strict-origin-when-cross-origin"><style type="text/css" nonce="">
      @import url("https://fonts.googleapis.com/css?family=Google+Sans");
      @import url("https://fonts.googleapis.com/css?family=Roboto");

      body {
        font-family: Roboto, arial, sans, sans-serif;
        margin: 0;
      }

      iframe {
        border: 0;
        frameborder: 0;
        height: 100%;
        width: 100%;
      }

      #header {
        align-items: center;
        background: white;
        border-bottom: 1px #ccc solid;
        display: flex;
        height: 60px;
        justify-content: space-between;
        position: fixed;
        top: 0;
        width: 100%;
        z-index: 100;
      }

      #header #title {
        font-family: 'Google Sans';
        font-size: large;
        margin: auto 0 auto 20px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        width: 70%;
      }

      #header #interval {
        margin: auto 25px auto 0;
        font-family: Roboto;
        font-size: small;;
      }

      #footer {
        background: #f0f0f0;
        border-bottom: 1px #ccc solid;
        bottom: 0;
        font-family: Roboto;
        font-size: small;
        padding: 10px 10px;
        position: fixed;
        text-align: center;
        width: 100%;
      }

      #contents {
        padding: 100px 20% 50px 20%;
      }

      @media only screen and (max-device-width: 800px) {
        #header {
          border-bottom-width: 5px;
          height: auto;
          display: block;
        }

        #header #title {
          font-size: 3em;
          margin: auto 0 auto 20px;
          width: 90%;
        }

        #header #interval {
          font-size: 1.5em;
          margin: 10px 0 auto 25px;
        }

        #contents {
          padding: 150px 5% 80px;
        }

        #footer {
          font-size: 2em;
        }
      }

      .dash {
        padding: 0 6px;
      }
    </style></head><body><div id="header"><div id="title">WebPerfWG call - March 26 2020</div><div id="interval"><span></span></div></div><div id="contents"><style type="text/css">ul.lst-kix_5oksab8dkpj3-4{list-style-type:none}.lst-kix_ejyhjwt9mio1-8>li:before{content:"\0025a0  "}ul.lst-kix_5oksab8dkpj3-5{list-style-type:none}ul.lst-kix_5oksab8dkpj3-6{list-style-type:none}.lst-kix_ejyhjwt9mio1-7>li:before{content:"\0025cb  "}ul.lst-kix_5oksab8dkpj3-7{list-style-type:none}ul.lst-kix_ejyhjwt9mio1-0{list-style-type:none}ul.lst-kix_5oksab8dkpj3-8{list-style-type:none}ul.lst-kix_ejyhjwt9mio1-1{list-style-type:none}ul.lst-kix_ejyhjwt9mio1-2{list-style-type:none}ul.lst-kix_ejyhjwt9mio1-3{list-style-type:none}ul.lst-kix_ejyhjwt9mio1-4{list-style-type:none}.lst-kix_ejyhjwt9mio1-4>li:before{content:"\0025cb  "}ul.lst-kix_ejyhjwt9mio1-5{list-style-type:none}ul.lst-kix_ejyhjwt9mio1-6{list-style-type:none}.lst-kix_5oksab8dkpj3-3>li:before{content:"\0025cf  "}.lst-kix_ejyhjwt9mio1-5>li:before{content:"\0025a0  "}ul.lst-kix_ejyhjwt9mio1-7{list-style-type:none}ul.lst-kix_ejyhjwt9mio1-8{list-style-type:none}.lst-kix_5oksab8dkpj3-4>li:before{content:"\0025cb  "}.lst-kix_ejyhjwt9mio1-6>li:before{content:"\0025cf  "}.lst-kix_ejyhjwt9mio1-0>li:before{content:"\0025cf  "}.lst-kix_ejyhjwt9mio1-1>li:before{content:"\0025cb  "}.lst-kix_5oksab8dkpj3-2>li:before{content:"\0025a0  "}.lst-kix_5oksab8dkpj3-1>li:before{content:"\0025cb  "}.lst-kix_ejyhjwt9mio1-3>li:before{content:"\0025cf  "}.lst-kix_5oksab8dkpj3-0>li:before{content:"\0025cf  "}.lst-kix_ejyhjwt9mio1-2>li:before{content:"\0025a0  "}li.li-bullet-0:before{margin-left:-18pt;white-space:nowrap;display:inline-block;min-width:18pt}.lst-kix_5oksab8dkpj3-6>li:before{content:"\0025cf  "}.lst-kix_5oksab8dkpj3-5>li:before{content:"\0025a0  "}.lst-kix_5oksab8dkpj3-7>li:before{content:"\0025cb  "}ul.lst-kix_5oksab8dkpj3-0{list-style-type:none}.lst-kix_5oksab8dkpj3-8>li:before{content:"\0025a0  "}ul.lst-kix_5oksab8dkpj3-1{list-style-type:none}ul.lst-kix_5oksab8dkpj3-2{list-style-type:none}ul.lst-kix_5oksab8dkpj3-3{list-style-type:none}ol{margin:0;padding:0}table td,table th{padding:0}.c0{margin-left:36pt;padding-top:0pt;padding-left:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c2{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c8{padding-top:18pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c6{padding-top:16pt;padding-bottom:4pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c7{color:#434343;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:14pt;font-family:"Arial";font-style:normal}.c9{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:16pt;font-family:"Arial";font-style:normal}.c11{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c3{text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;color:#1155cc;text-decoration:underline}.c10{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}.c5{padding:0;margin:0}.c4{color:inherit;text-decoration:inherit}.c1{font-weight:700}.title{padding-top:0pt;color:#000000;font-size:26pt;padding-bottom:3pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.subtitle{padding-top:0pt;color:#666666;font-size:15pt;padding-bottom:16pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}li{color:#000000;font-size:11pt;font-family:"Arial"}p{margin:0;color:#000000;font-size:11pt;font-family:"Arial"}h1{padding-top:20pt;color:#000000;font-size:20pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h2{padding-top:18pt;color:#000000;font-size:16pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h3{padding-top:16pt;color:#434343;font-size:14pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h4{padding-top:14pt;color:#666666;font-size:12pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h5{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h6{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;font-style:italic;orphans:2;widows:2;text-align:left}</style><div class="c10"><h2 class="c8" id="h.4sr05sxkhgc0"><span class="c9">Participants</span></h2><p class="c11"><span>Noam Rosenthal, Peter Perlepes, Nicolás Peña, Annie Sullivan, Steve Bougon, Michal Mocny., Michelle Vu, Alex Christensen, Benjamin De Kosnik, Yoav Weiss, Nic Jansma, Ryosuke Niwa, Philippe Le Hegaret, Timo Tijhof, Dave Pifke, Gilles Dubuc, </span><span>Peter Hedenskog, Aaron S</span><span class="c2">chulz</span></p><h2 class="c8" id="h.a2gu5wuhy6r2"><span class="c9">Next Meeting</span></h2><ul class="c5 lst-kix_ejyhjwt9mio1-0 start"><li class="c0 li-bullet-0"><span class="c2">Thursday April 9th at 10am PDT / 1pm EDT</span></li></ul><h2 class="c8" id="h.rm1jq61ypcvg"><span class="c9">Paint Timing Issue Triage</span></h2><h3 class="c6" id="h.qmmettt0m0u8"><span class="c3"><a class="c4" href="https://www.google.com/url?q=https://github.com/w3c/paint-timing/issues/54&amp;sa=D&amp;source=editors&amp;ust=1613234746117000&amp;usg=AOvVaw3jaIY7ILRR2kFA5UF2SHkL">Clarify what happens to a page which consists of just an iframe</a></span></h3><ul class="c5 lst-kix_5oksab8dkpj3-0 start"><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: The fact that we're exposing paint times in cross-origin frames can in some browsers expose information about the main frame.</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav</span><span class="c2"><b></b>: Does this affect other browsers?</span></li><li class="c0 li-bullet-0"><span class="c1">Benjamin</span><span class="c2"><b></b>: I'm not aware offhand</span></li><li class="c0 li-bullet-0"><span class="c1">Nicolás</span><span class="c2"><b></b>: In Chrome, paints are separate per renderer process, so first paints are per-frame.</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav</span><span class="c2"><b></b>: In Chrome, iframe paints are completely separate from the main frame paints.</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: In Webkit, main frame and cross-origin iframes are painted together.</span></li><li class="c0 li-bullet-0"><span class="c1">Nicolás</span><span class="c2"><b></b>: is that due to your first paint heuristics?</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: yeah</span></li><li class="c0 li-bullet-0"><span class="c1">Noam</span><span class="c2"><b></b>: Implementations could choose to not expose paint timings for cross-origin iframes (or any frame), as long as the developer could detect this</span></li><li class="c0 li-bullet-0"><span class="c1">Nicolás</span><span class="c2"><b></b>: Detection could be done via supportedEntryTypes</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: spec currently doesn’t allow that. We’d need to change it.</span></li><li class="c0 li-bullet-0"><span class="c1">Noam</span><span class="c2"><b></b>: supportedEntryTypes is per browsing context, so that fine</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: Not great that different browsers behave differently, but that’s the only way to resolve that</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav</span><span class="c2"><b></b>: Yeah, indicating it’s not supported is better than returning invalid values</span></li></ul><h3 class="c6" id="h.iywyhl5vy4w4"><span class="c3"><a class="c4" href="https://www.google.com/url?q=https://github.com/w3c/paint-timing/issues/57&amp;sa=D&amp;source=editors&amp;ust=1613234746119000&amp;usg=AOvVaw0YGI9qJpVHSZTmcIgqESsZ">Allow optional implementation of first-paint</a></span></h3><ul class="c5 lst-kix_5oksab8dkpj3-0"><li class="c0 li-bullet-0"><span class="c1">Yoav</span><span class="c2"><b></b>: From Webkit's perspective, FP and FCP are supposed to happen at the same time due to various heuristics, so Webkit may not want to implement FP (and just FCP)</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: In addition, we think FP is a bad metric to optimize for. People should optimize for FCP</span></li><li class="c0 li-bullet-0"><span class="c1">Nicolás</span><span class="c2"><b></b>: Chrome thinks both FP and FCP have value. Would be reasonable to make it optional. Not sure if we need developers to be able to detect lack of support.</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: Could we have separate types in supportedEntryTypes so the developer could feature-detect</span></li><li class="c0 li-bullet-0"><span class="c1">Noam</span><span class="c2"><b></b>: Like the idea of separate entry types. The use of “name” here is inconsistent with other entries</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav</span><span class="c2"><b></b>: We already have "paint" entry type today that is being used, so it would be ideal to keep it. &nbsp;Do we then keep it for backward-compat?</span></li><li class="c0 li-bullet-0"><span class="c1">Nicolás</span><span class="c2"><b></b>: Worried that we would need to support both forever. Would be better to avoid breaking changes</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: But it’s only implemented in one browsers, so sites would have to adapt.</span></li><li class="c0 li-bullet-0"><span class="c1">Timo</span><span class="c2"><b></b>: From a developer perspective, we ask for “paint” and get both entries or not. What breakage would we expect?</span></li><li class="c0 li-bullet-0"><span class="c1">Nicolás</span><span class="c2"><b></b>: That’s my point. Making it optional is fine. Changing the entry type name less so, because code w3ill need to change.</span></li><li class="c0 li-bullet-0"><span class="c1">Timo</span><span class="c2"><b></b>: Yeah, the API is nicely designed and enables things to be optional</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: Concerned about compatibility concerns with APIs shipping in one browser. That’s not how it works.</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav</span><span class="c2"><b></b>: With my Chromium hat on, we’re not saying it’s impossible to change, but there’s a cost to that, and from what I’m hearing, there’s no clear use-case that would justify it.</span></li><li class="c0 li-bullet-0"><span class="c1">Nicolás</span><span class="c2"><b></b>: Also, we made a bunch of changes to the spec that would now force us to change our implementation. So saying we’re opposing changes is not fair.</span></li><li class="c0 li-bullet-0"><span class="c1">Gilles</span><span class="c2"><b></b>: What would be the downside of when listening to "paint" only getting one type or the other or both?</span></li><li class="c0 li-bullet-0"><span class="c1">Noam</span><span class="c2"><b></b>: It's about expectations for the developer, what they can know they will get data for (or will always be missing). But it doesn’t seem crucial.</span></li><li class="c0 li-bullet-0"><span class="c2">...If we stuck with supportedEntryTypes of "paint", the spec could say that it doesn't guarantee all types such as FP and/or FCP. Maybe we should add other feature detection if needed.</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: I’d object to adding another mechanism. If we need feature detection, it should be a separate type.</span></li><li class="c0 li-bullet-0"><span class="c1">Noam</span><span class="c2"><b></b>: Right now, it doesn’t seem necessary</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav</span><span class="c2"><b></b>: FWIW, I agree that if we needed feature detection, it should have worked with the current mechanism. </span></li><li class="c0 li-bullet-0"><span class="c2">… But folks in the room that actually use the API say that it’s not something they ever needed.</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: Proposal is to update the spec to just say that FP is optional</span></li><li class="c0 li-bullet-0"><span class="c1">Ben</span><span class="c2"><b></b>: Would this allow us to add a "Full Paint" as optional here?</span></li><li class="c0 li-bullet-0"><span class="c1">Noam</span><span class="c2"><b></b>: We don't necessarily want each browser to have their own optional definitions, but if "Full Paint" is important, we can get it defined in the spec and possibly be optional</span></li><li class="c0 li-bullet-0"><span class="c1">Peter</span><span class="c2"><b></b>: Agree as a web developer that there’s no need for more specific feature detection</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav</span><span class="c2"><b></b>: Agreement we can make First Paint optional in the spec?</span></li><li class="c0 li-bullet-0"><span class="c1">Everyone</span><span class="c2"><b></b>: Yup!</span></li></ul><h3 class="c6" id="h.gm2nxge8hmj0"><span class="c3"><a class="c4" href="https://www.google.com/url?q=https://github.com/w3c/paint-timing/issues/58&amp;sa=D&amp;source=editors&amp;ust=1613234746122000&amp;usg=AOvVaw0rHiPstAmJAsRg4JU-ebdB">Clarify whether First Contentful Paint considers content outside the viewport</a></span></h3><ul class="c5 lst-kix_5oksab8dkpj3-0"><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: There are different definitions of "viewport" (visual or layout), and detecting whether something is in the viewport can be tricky.</span></li><li class="c0 li-bullet-0"><span class="c2">… There are a few cases where content outside of the viewport the user could never see (e.g. negative px offset)</span></li><li class="c0 li-bullet-0"><span class="c1">Nicolás</span><span class="c2"><b></b>: I thought this is already solved with Noam’s suggestion to clip the bounding rect with the scrolling area. Is that not the case?</span></li><li class="c0 li-bullet-0"><span class="c1">Noam</span><span class="c2"><b></b>: Current version clips with the scrolling area, so Contentful Paint is anything the user can potentially get to by scrolling.</span></li><li class="c0 li-bullet-0"><span class="c1">Timo</span><span class="c2"><b></b>: Also depends on the directionality of the page - RTL vs. LTR</span></li><li class="c0 li-bullet-0"><span class="c1">Noam</span><span class="c2"><b></b>: Falls out of the scrolling area definition.</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: Does it refer to visual viewport or the layout viewport?</span></li><li class="c0 li-bullet-0"><span class="c1">Noam</span><span class="c2"><b></b>: It doesn’t have a viewport. It’s about the root box</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: So the viewport part is still an open question</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav</span><span class="c2"><b></b>: We don’t care about the viewport. We can say any paint within the scrolling area is contentful, and any paint outside is not. </span></li><li class="c0 li-bullet-0"><span class="c2">… We don’t need to define which viewport we don’t care about. Because we don’t care about all of them.</span></li><li class="c0 li-bullet-0"><span class="c1">Nicolás</span><span class="c2"><b></b>: clipping with the scrolling area is enough to clarify what counts. No need to reference the viewport at all.</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: We can decide that viewport is irrelevant. But it’s not clear to me that this is the right decision.</span></li><li class="c0 li-bullet-0"><span class="c2">… If paints happen outside the viewport and the user sees nothing, should they count?</span></li><li class="c0 li-bullet-0"><span class="c2">… One argument against looking at the viewport is that it would make the metric more variant depending on the user’s device. </span></li><li class="c0 li-bullet-0"><span class="c2">… Maybe the people who are using it can comment.</span></li><li class="c0 li-bullet-0"><span class="c1">Timo</span><span class="c2"><b></b>: Do we want to punish websites with users on small screens? Difference between content available and visible. Also, computing the viewport can be expensive</span></li><li class="c0 li-bullet-0"><span class="c1">Noam</span><span class="c2"><b></b>: Already computed for intersection observer.</span></li><li class="c0 li-bullet-0"><span class="c1">Nicolás</span><span class="c2"><b></b>: but it could be expensive from a performance perspective.</span></li><li class="c0 li-bullet-0"><span class="c1">Gilles</span><span class="c2"><b></b>: It would be awkward if you have content that's outside of the viewport, and will only show up when they scroll, then the metric would be dependent on user interaction.</span></li><li class="c0 li-bullet-0"><span class="c2">… To me, that’s the strongest argument to ignore the viewport.</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav</span><span class="c2"><b></b>: I struggle to find cases where we have paints outside the viewport but not inside it.</span></li><li class="c0 li-bullet-0"><span class="c1">Noam</span><span class="c2"><b></b>: When I worked at Wix, many sites would have large BG image above the fold, and the text below the fold. </span></li><li class="c0 li-bullet-0"><span class="c2">… So the initial viewport would be painted after the text below the fold. </span></li><li class="c0 li-bullet-0"><span class="c2">… The Paint API should be as much as possible separate from user interaction and tied to loading time</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: Avoiding dependency on user interaction seems like the strongest argument</span></li><li class="c0 li-bullet-0"><span class="c1">Dave</span><span class="c2"><b></b>: Should we define another event for when the user scrolls?</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav</span><span class="c2"><b></b>: User dependent metrics are hard to reason about as different users do different things.</span></li><li class="c0 li-bullet-0"><span class="c1">Noam</span><span class="c2"><b></b>: Also, that metric exists in the form of intersection observer.</span></li><li class="c0 li-bullet-0"><span class="c1">Timo</span><span class="c2"><b></b>: True that websites should be punished if they only paint outside the viewport, but maybe separate from this API</span></li><li class="c0 li-bullet-0"><span class="c1">Gilles</span><span class="c2"><b></b>: in the list of suggestions, we also have attribution for the paint, which would enable sites to see their first paint is outside the viewport.</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: Attribution?</span></li><li class="c0 li-bullet-0"><span class="c1">Gilles</span><span class="c2"><b></b>: which element first painted</span></li><li class="c0 li-bullet-0"><span class="c1">Nicolás</span><span class="c2"><b></b>: we can have many first elements</span></li><li class="c0 li-bullet-0"><span class="c1">Gilles</span><span class="c2"><b></b>: a can of worms for the future. But that may be the solution here.</span></li><li class="c0 li-bullet-0"><span class="c1">Nicolás</span><span class="c2"><b></b>: we also have a note relating to the viewport: "... an element is paintable if it is within the viewport, or can potentially be in the viewport as a result of scrolling or zooming."</span></li><li class="c0 li-bullet-0"><span class="c2">… Do we need to remove it?</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: We can leave the word viewport in this non-normative note as long as we clear out the rest of the references.</span></li></ul><h3 class="c6" id="h.ad5rup7gcx3"><span class="c3"><a class="c4" href="https://www.google.com/url?q=https://github.com/w3c/paint-timing/issues/38&amp;sa=D&amp;source=editors&amp;ust=1613234746126000&amp;usg=AOvVaw0osIjcypgCrSMdwc22v-5G">Be more precise about first paint vs first contentful paint</a></span></h3><ul class="c5 lst-kix_5oksab8dkpj3-0"><li class="c0 li-bullet-0"><span class="c1">Nicolás</span><span class="c2"><b></b>: Processing logic is a little too-informal. If it’s a “first paint” we mark first-paint, but there’s no way of knowing that. </span></li><li class="c0 li-bullet-0"><span class="c2">… Some improvement could be done to keep track of that. But no need to discuss it necessarily.</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: seems editorial</span></li></ul><h3 class="c6" id="h.rix9ww13tc3t"><span class="c3"><a class="c4" href="https://www.google.com/url?q=https://github.com/w3c/paint-timing/issues/75&amp;sa=D&amp;source=editors&amp;ust=1613234746127000&amp;usg=AOvVaw2YLcITpCKpS6TbkJASpbxT">Should transparent (alpha-value=0) text be considered contentful</a></span></h3><ul class="c5 lst-kix_5oksab8dkpj3-0"><li class="c0 li-bullet-0"><span class="c1">Noam</span><span class="c2"><b></b>: Some discussion on the issue. I think there’s consensus that transparent text should not be contentful, but unclear about text decorations: shaddows, underlines, emphasis</span></li><li class="c0 li-bullet-0"><span class="c2">… In the PR I proposed that shadows would be contentful but decorations wouldn’t be, as you can’t read the text from them</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: Maybe we should special case transparent text, as the user can still select it and interact with it</span></li><li class="c0 li-bullet-0"><span class="c1">Nicolás</span><span class="c2"><b></b>: Suggested by Marcus from Mozilla, so I wonder if they are OK with not ignoring transparent text.</span></li><li class="c0 li-bullet-0"><span class="c1">Benjamin</span><span class="c2"><b></b>: I’ll ask Marcus about that</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: Where’s the comment?</span></li><li class="c0 li-bullet-0"><span class="c1">Nicolás</span><span><b></b>: </span><span class="c3"><a class="c4" href="https://www.google.com/url?q=https://github.com/w3c/paint-timing/issues/58%23issuecomment-602802965&amp;sa=D&amp;source=editors&amp;ust=1613234746128000&amp;usg=AOvVaw0qMKiwWzuQep6V9u3bbyhr">Issue 58</a></span></li><li class="c0 li-bullet-0"><span class="c1">Noam</span><span><b></b>: And then I opened </span><span class="c3"><a class="c4" href="https://www.google.com/url?q=https://github.com/w3c/paint-timing/issues/75&amp;sa=D&amp;source=editors&amp;ust=1613234746129000&amp;usg=AOvVaw1fX-hKegx4fsc9_OPaR5e4">issue 75</a></span><span class="c2">&nbsp;as a result</span></li><li class="c0 li-bullet-0"><span class="c1">Timo</span><span class="c2"><b></b>: The comment also mentions scales and opacity</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav</span><span class="c2"><b></b>: From my perspective, it’s hard for users to distinguish between opaque text and text with very low opacity values, or text that has very low contrast compared to its background. </span></li><li class="c0 li-bullet-0"><span class="c2">… Ryosuke’s comment about text selection makes a very good point, because this text is potentially visible to the user.</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: If the selects the text, they can also copy it. So its content.</span></li><li class="c0 li-bullet-0"><span class="c1">Timo</span><span class="c2"><b></b>: Also for accessibility, we should treat nearly invisible text differently</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: In accessibility cases, people put it off screen. I don’t have strong opinions.</span></li><li class="c0 li-bullet-0"><span class="c1">Nicolás</span><span class="c2"><b></b>: Same. So let’s talk to Mozilla folks that presented the issue.</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke</span><span class="c2"><b></b>: Can you CC them on the issue?</span></li><li class="c0 li-bullet-0"><span class="c1">Nicolás</span><span><b></b>: Will do!</span></li></ul></div></div><div id="footer"><span>Published by <a target="_blank" title="Learn more about Google Drive" href="https://docs.google.com/">Google Drive</a></span><span class="dash">–</span><a href="https://docs.google.com/u/0/abuse?id=AKkXjow3cYDjNo6t65462u20o4NO2UWBM2y6MWFOZB-SVN1rV6xQYFqdWMIgBh75P8dkt68wOdQGSL0uRVhyUrE:0">Report Abuse</a></div><script type="text/javascript" nonce="">(function(){/*

 Copyright The Closure Library Authors.
 SPDX-License-Identifier: Apache-2.0
*/
var aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};function ba(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var ca=ba(this);
function da(a,b){if(b)a:{var c=ca;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&aa(c,a,{configurable:!0,writable:!0,value:b})}}var ea="function"==typeof Object.create?Object.create:function(a){function b(){}b.prototype=a;return new b},fa;
if("function"==typeof Object.setPrototypeOf)fa=Object.setPrototypeOf;else{var ha;a:{var ia={a:!0},ja={};try{ja.__proto__=ia;ha=ja.a;break a}catch(a){}ha=!1}fa=ha?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var ka=fa;
function h(a,b){a.prototype=ea(b.prototype);a.prototype.constructor=a;if(ka)ka(a,b);else for(var c in b)if("prototype"!=c)if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.o=b.prototype}da("Object.is",function(a){return a?a:function(b,c){return b===c?0!==b||1/b===1/c:b!==b&&c!==c}});var l=this||self;function la(){}function ma(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}
function na(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();d.push.apply(d,arguments);return a.apply(this,d)}}function oa(a,b){function c(){}c.prototype=b.prototype;a.o=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.B=function(d,e,f){for(var g=Array(arguments.length-2),k=2;k<arguments.length;k++)g[k-2]=arguments[k];return b.prototype[e].apply(d,g)}}function pa(a){return a};var qa=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if("string"===typeof a)return"string"!==typeof b||1!=b.length?-1:a.indexOf(b,0);for(var c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};function ra(a,b,c){for(var d in a)b.call(c,a[d],d,a)};var m;function p(a,b){this.i=a===sa&&b||"";this.j=ta}p.prototype.h=!0;p.prototype.g=function(){return this.i};var ta={},sa={};var ua=String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]},va=/&/g,wa=/</g,xa=/>/g,ya=/"/g,za=/'/g,Aa=/\x00/g,Ba=/[\x00&<>"']/;function Ca(a,b){return a<b?-1:a>b?1:0};function q(a,b){this.i=b===r?a:""}q.prototype.h=!0;q.prototype.g=function(){return this.i.toString()};q.prototype.toString=function(){return this.i.toString()};function u(a){return a instanceof q&&a.constructor===q?a.i:"type_error:SafeUrl"}
var Da=/^(?:audio\/(?:3gpp2|3gpp|aac|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-matroska|x-wav|wav|webm)|font\/\w+|image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon)|video\/(?:mpeg|mp4|ogg|webm|quicktime|x-matroska))(?:;\w+=(?:\w+|"[\w;,= ]+"))*$/i,Ea=/^data:(.*);base64,[a-z0-9+\/]+=*$/i,Fa=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;function Ga(a){if(a instanceof q)return a;a="object"==typeof a&&a.h?a.g():String(a);Fa.test(a)||(a="about:invalid#zClosurez");return new q(a,r)}
var r={},Ha=new q("about:invalid#zClosurez",r);var v;a:{var Ia=l.navigator;if(Ia){var Ja=Ia.userAgent;if(Ja){v=Ja;break a}}v=""}function w(a){return-1!=v.indexOf(a)};function x(a,b,c){this.i=c===Ka?a:""}x.prototype.h=!0;x.prototype.g=function(){return this.i.toString()};x.prototype.toString=function(){return this.i.toString()};var Ka={};function La(a,b,c,d){a=a instanceof q?a:Ga(a);b=b||l;c=c instanceof p?c instanceof p&&c.constructor===p&&c.j===ta?c.i:"type_error:Const":c||"";return void 0!==d?b.open(u(a),c,d,void 0):b.open(u(a),c)};function Ma(a){Ma[" "](a);return a}Ma[" "]=la;function y(a,b,c){return Object.prototype.hasOwnProperty.call(a,b)?a[b]:a[b]=c(b)};var Na=w("Opera"),z=w("Trident")||w("MSIE"),Oa=w("Edge"),Pa=Oa||z,Qa=w("Gecko")&&!(-1!=v.toLowerCase().indexOf("webkit")&&!w("Edge"))&&!(w("Trident")||w("MSIE"))&&!w("Edge"),Ra=-1!=v.toLowerCase().indexOf("webkit")&&!w("Edge"),Sa=w("Macintosh");function Ta(){var a=l.document;return a?a.documentMode:void 0}var Ua;
a:{var Va="",Wa=function(){var a=v;if(Qa)return/rv:([^\);]+)(\)|;)/.exec(a);if(Oa)return/Edge\/([\d\.]+)/.exec(a);if(z)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(Ra)return/WebKit\/(\S+)/.exec(a);if(Na)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Wa&&(Va=Wa?Wa[1]:"");if(z){var Xa=Ta();if(null!=Xa&&Xa>parseFloat(Va)){Ua=String(Xa);break a}}Ua=Va}var Ya=Ua,Za={},$a;if(l.document&&z){var ab=Ta();$a=ab?ab:parseInt(Ya,10)||void 0}else $a=void 0;var bb=$a;function cb(a){return y(a.prototype,"$$generatedClassName",function(){return"Class$obf_"+{valueOf:function(){return++db}}})}var db=1E3;function A(){}A.prototype.u=function(){return this.j||(Object.defineProperties(this,{j:{value:++eb,enumerable:!1}}),this.j)};A.prototype.toString=function(){var a=B(fb(gb(this.constructor)))+"@";var b=(this.u()>>>0).toString(16);return a+B(b)};function D(){}h(D,A);D.prototype.i=function(a){this.h=a;if(a instanceof Object)try{a.A=this}catch(b){}};function hb(a){a.h instanceof Error&&(Error.captureStackTrace?Error.captureStackTrace(a.h):a.h.stack=Error().stack)}D.prototype.toString=function(){var a=fb(gb(this.constructor)),b=this.l;return null==b?a:B(a)+": "+B(b)};function ib(){}h(ib,D);function jb(){}h(jb,ib);var eb=0;function E(){}h(E,jb);E.prototype.i=function(a){jb.prototype.i.call(this,Object.is(this.g,"__noinit__")?a:this.g)};function kb(){}h(kb,E);function lb(a,b){return"string"==typeof a?a.charCodeAt(b):a.g(b)};function B(a){return null==a?"null":a.toString()}function mb(a){return 65536<=a?B(String.fromCharCode((55296+((a-65536|0)>>10&1023)|0)&65535))+B(String.fromCharCode((56320+((a-65536|0)&1023)|0)&65535)):String.fromCharCode(a&65535)}function nb(a,b){var c=b,d=a.length,e;b=lb(a,(e=c,c=c+1|0,e));var f;if(e=55296<=b&&56319>=b&&c<d)a=f=lb(a,c),e=56320<=a&&57343>=a;var g;e?g=65536+((b&1023)<<10)+(f&1023)|0:g=b;return g};function ob(a,b){this.h=a;this.g=b}h(ob,A);function fb(a){var b=cb(a.h);0!=a.g&&(b="L"+B(b)+";");a=a.g;for(var c="",d=0;d<a;d=d+1|0)c=B(c)+"[";return B(c)+B(b)}ob.prototype.toString=function(){return"class "+B(fb(this))};function gb(a){var b=0;return y(a.prototype,"$$class/"+b,function(){return new ob(a,b)})};function pb(a,b){return null==a?a:b?decodeURI(a):decodeURIComponent(a)};var qb=/^(?:([^:/?#.]+):)?(?:\/\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#([\S\s]*))?$/;function rb(a){a=qb.exec(a);for(var b=[],c=0;7>=c;c=c+1|0)a.length<=c||null==a[c]?b.push(null):b.push(a[c]);return b}
function sb(a,b){var c=a.indexOf(mb(35));c=0>c?a.length:c;a:{var d=0;for(var e=b.length;0<(d=a.indexOf(b,d))&&d<c;){var f=nb(a,d-1|0);if(38==f||63==f){if((d+e|0)>=a.length)break a;f=nb(a,d+e|0);if(61==f||38==f||35==f)break a}d=d+(e+1)|0}d=-1}if(0>d)return null;e=a.indexOf(mb(38),d);if(0>e||e>c)e=c;d=d+(b.length+1)|0;b=Math.min(a.length,d);a=a.substr(b,Math.min(a.length,Math.max(d,e))-b|0);c=" ";for(b=0;0<=(b=c.indexOf("\\",b));)36==c.charCodeAt(b+1|0)?(d=B(c.substr(0,b|0))+"$",e=b=b+1|0,c=d+B(c.substr(e))):
(d=B(c.substr(0,b|0)),e=b=b+1|0,c=d+B(c.substr(e)));a=a.replace(/\+/g,c);return pb(a,!1)};function F(a,b){this.h=b;for(var c=[],d=!0,e=a.length-1;0<=e;e--){var f=a[e]|0;d&&f==b||(c[e]=f,d=!1)}this.g=c}var tb={};function ub(a){return-128<=a&&128>a?y(tb,a,function(b){return new F([b|0],0>b?-1:0)}):new F([a|0],0>a?-1:0)}function G(a){if(isNaN(a)||!isFinite(a))return H;if(0>a)return I(G(-a));for(var b=[],c=1,d=0;a>=c;d++)b[d]=a/c|0,c*=4294967296;return new F(b,0)}var H=ub(0),J=ub(1),vb=ub(16777216);
function K(a){if(-1==a.h)return-K(I(a));for(var b=0,c=1,d=0;d<a.g.length;d++){var e=L(a,d);b+=(0<=e?e:4294967296+e)*c;c*=4294967296}return b}F.prototype.toString=function(a){a=a||10;if(2>a||36<a)throw Error("radix out of range: "+a);if(M(this))return"0";if(-1==this.h)return"-"+I(this).toString(a);for(var b=G(Math.pow(a,6)),c=this,d="";;){var e=wb(c,b).g;c=N(c,O(e,b));var f=((0<c.g.length?c.g[0]:c.h)>>>0).toString(a);c=e;if(M(c))return f+d;for(;6>f.length;)f="0"+f;d=f+d}};
function L(a,b){return 0>b?0:b<a.g.length?a.g[b]:a.h}function M(a){if(0!=a.h)return!1;for(var b=0;b<a.g.length;b++)if(0!=a.g[b])return!1;return!0}function P(a,b){a=N(a,b);return-1==a.h?-1:M(a)?0:1}function I(a){for(var b=a.g.length,c=[],d=0;d<b;d++)c[d]=~a.g[d];return(new F(c,~a.h)).add(J)}F.prototype.abs=function(){return-1==this.h?I(this):this};
F.prototype.add=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0,e=0;e<=b;e++){var f=d+(L(this,e)&65535)+(L(a,e)&65535),g=(f>>>16)+(L(this,e)>>>16)+(L(a,e)>>>16);d=g>>>16;f&=65535;g&=65535;c[e]=g<<16|f}return new F(c,c[c.length-1]&-2147483648?-1:0)};function N(a,b){return a.add(I(b))}
function O(a,b){if(M(a)||M(b))return H;if(-1==a.h)return-1==b.h?O(I(a),I(b)):I(O(I(a),b));if(-1==b.h)return I(O(a,I(b)));if(0>P(a,vb)&&0>P(b,vb))return G(K(a)*K(b));for(var c=a.g.length+b.g.length,d=[],e=0;e<2*c;e++)d[e]=0;for(e=0;e<a.g.length;e++)for(var f=0;f<b.g.length;f++){var g=L(a,e)>>>16,k=L(a,e)&65535,t=L(b,f)>>>16,n=L(b,f)&65535;d[2*e+2*f]+=k*n;Q(d,2*e+2*f);d[2*e+2*f+1]+=g*n;Q(d,2*e+2*f+1);d[2*e+2*f+1]+=k*t;Q(d,2*e+2*f+1);d[2*e+2*f+2]+=g*t;Q(d,2*e+2*f+2)}for(e=0;e<c;e++)d[e]=d[2*e+1]<<16|
d[2*e];for(e=c;e<2*c;e++)d[e]=0;return new F(d,0)}function Q(a,b){for(;(a[b]&65535)!=a[b];)a[b+1]+=a[b]>>>16,a[b]&=65535,b++}function S(a,b){this.g=a;this.h=b}
function wb(a,b){if(M(b))throw Error("division by zero");if(M(a))return new S(H,H);if(-1==a.h)return b=wb(I(a),b),new S(I(b.g),I(b.h));if(-1==b.h)return b=wb(a,I(b)),new S(I(b.g),b.h);if(30<a.g.length){if(-1==a.h||-1==b.h)throw Error("slowDivide_ only works with positive integers.");for(var c=J,d=b;0>=P(d,a);)c=xb(c,1),d=xb(d,1);var e=T(c,1),f=T(d,1);d=T(d,2);for(c=T(c,2);!M(d);){var g=f.add(d);0>=P(g,a)&&(e=e.add(c),f=g);d=T(d,1);c=T(c,1)}b=N(a,O(e,b));return new S(e,b)}for(e=H;0<=P(a,b);){c=Math.max(1,
Math.floor(K(a)/K(b)));d=Math.ceil(Math.log(c)/Math.LN2);d=48>=d?1:Math.pow(2,d-48);f=G(c);for(g=O(f,b);-1==g.h||0<P(g,a);)c-=d,f=G(c),g=O(f,b);M(f)&&(f=J);e=e.add(f);a=N(a,g)}return new S(e,a)}F.prototype.and=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)&L(a,d);return new F(c,this.h&a.h)};F.prototype.or=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)|L(a,d);return new F(c,this.h|a.h)};
F.prototype.xor=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)^L(a,d);return new F(c,this.h^a.h)};function xb(a,b){var c=b>>5;b%=32;for(var d=a.g.length+c+(0<b?1:0),e=[],f=0;f<d;f++)e[f]=0<b?L(a,f-c)<<b|L(a,f-c-1)>>>32-b:L(a,f-c);return new F(e,a.h)}function T(a,b){var c=b>>5;b%=32;for(var d=a.g.length-c,e=[],f=0;f<d;f++)e[f]=0<b?L(a,f+c)>>>b|L(a,f+c+1)<<32-b:L(a,f+c);return new F(e,a.h)};N(xb(J,32),J);N(xb(J,128),J);function yb(a){a&&"function"==typeof a.v&&a.v()};function U(){this.h=this.h;this.g=this.g}U.prototype.h=!1;U.prototype.v=function(){this.h||(this.h=!0,this.j())};U.prototype.j=function(){if(this.g)for(;this.g.length;)this.g.shift()()};var zb=!z||9<=Number(bb),Ab=!z||9<=Number(bb),Bb=z&&!y(Za,"9",function(){for(var a=0,b=ua(String(Ya)).split("."),c=ua("9").split("."),d=Math.max(b.length,c.length),e=0;0==a&&e<d;e++){var f=b[e]||"",g=c[e]||"";do{f=/(\d*)(\D*)(.*)/.exec(f)||["","","",""];g=/(\d*)(\D*)(.*)/.exec(g)||["","","",""];if(0==f[0].length&&0==g[0].length)break;a=Ca(0==f[1].length?0:parseInt(f[1],10),0==g[1].length?0:parseInt(g[1],10))||Ca(0==f[2].length,0==g[2].length)||Ca(f[2],g[2]);f=f[3];g=g[3]}while(0==a)}return 0<=a}),
Cb=function(){if(!l.addEventListener||!Object.defineProperty)return!1;var a=!1,b=Object.defineProperty({},"passive",{get:function(){a=!0}});try{l.addEventListener("test",la,b),l.removeEventListener("test",la,b)}catch(c){}return a}();function Db(a,b){this.type=a;this.g=this.target=b;this.defaultPrevented=!1}Db.prototype.h=function(){this.defaultPrevented=!0};function V(a,b){Db.call(this,a?a.type:"");this.relatedTarget=this.g=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=0;this.key="";this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1;this.state=null;this.pointerId=0;this.pointerType="";this.i=null;if(a){var c=this.type=a.type,d=a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:null;this.target=a.target||a.srcElement;this.g=b;if(b=a.relatedTarget){if(Qa){a:{try{Ma(b.nodeName);var e=!0;break a}catch(f){}e=
!1}e||(b=null)}}else"mouseover"==c?b=a.fromElement:"mouseout"==c&&(b=a.toElement);this.relatedTarget=b;d?(this.clientX=void 0!==d.clientX?d.clientX:d.pageX,this.clientY=void 0!==d.clientY?d.clientY:d.pageY,this.screenX=d.screenX||0,this.screenY=d.screenY||0):(this.clientX=void 0!==a.clientX?a.clientX:a.pageX,this.clientY=void 0!==a.clientY?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0);this.button=a.button;this.key=a.key||"";this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=
a.shiftKey;this.metaKey=a.metaKey;this.pointerId=a.pointerId||0;this.pointerType="string"===typeof a.pointerType?a.pointerType:Eb[a.pointerType]||"";this.state=a.state;this.i=a;a.defaultPrevented&&V.o.h.call(this)}}oa(V,Db);var Fb=[1,4,2],Eb={2:"touch",3:"pen",4:"mouse"};V.prototype.h=function(){V.o.h.call(this);var a=this.i;if(a.preventDefault)a.preventDefault();else if(a.returnValue=!1,Bb)try{if(a.ctrlKey||112<=a.keyCode&&123>=a.keyCode)a.keyCode=-1}catch(b){}};var Gb="closure_listenable_"+(1E6*Math.random()|0);var Hb=0;function Ib(a,b,c,d,e){this.listener=a;this.g=null;this.src=b;this.type=c;this.capture=!!d;this.h=e;this.key=++Hb;this.m=this.s=!1}function Jb(a){a.m=!0;a.listener=null;a.g=null;a.src=null;a.h=null};function Kb(a){this.src=a;this.g={};this.h=0}Kb.prototype.add=function(a,b,c,d,e){var f=a.toString();a=this.g[f];a||(a=this.g[f]=[],this.h++);var g;a:{for(g=0;g<a.length;++g){var k=a[g];if(!k.m&&k.listener==b&&k.capture==!!d&&k.h==e)break a}g=-1}-1<g?(b=a[g],c||(b.s=!1)):(b=new Ib(b,this.src,f,!!d,e),b.s=c,a.push(b));return b};function Lb(a,b){var c=b.type;if(c in a.g){var d=a.g[c],e=qa(d,b),f;(f=0<=e)&&Array.prototype.splice.call(d,e,1);f&&(Jb(b),0==a.g[c].length&&(delete a.g[c],a.h--))}};var Mb="closure_lm_"+(1E6*Math.random()|0),Nb={},Ob=0;function Pb(a,b,c,d,e){if(d&&d.once)return Qb(a,b,c,d,e);if(Array.isArray(b)){for(var f=0;f<b.length;f++)Pb(a,b[f],c,d,e);return null}c=Rb(c);return a&&a[Gb]?a.g.add(String(b),c,!1,ma(d)?!!d.capture:!!d,e):Sb(a,b,c,!1,d,e)}
function Sb(a,b,c,d,e,f){if(!b)throw Error("Invalid event type");var g=ma(e)?!!e.capture:!!e,k=Tb(a);k||(a[Mb]=k=new Kb(a));c=k.add(b,c,d,g,f);if(c.g)return c;d=Ub();c.g=d;d.src=a;d.listener=c;if(a.addEventListener)Cb||(e=g),void 0===e&&(e=!1),a.addEventListener(b.toString(),d,e);else if(a.attachEvent)a.attachEvent(Vb(b.toString()),d);else if(a.addListener&&a.removeListener)a.addListener(d);else throw Error("addEventListener and attachEvent are unavailable.");Ob++;return c}
function Ub(){var a=Wb,b=Ab?function(c){return a.call(b.src,b.listener,c)}:function(c){c=a.call(b.src,b.listener,c);if(!c)return c};return b}function Qb(a,b,c,d,e){if(Array.isArray(b)){for(var f=0;f<b.length;f++)Qb(a,b[f],c,d,e);return null}c=Rb(c);return a&&a[Gb]?a.g.add(String(b),c,!0,ma(d)?!!d.capture:!!d,e):Sb(a,b,c,!0,d,e)}
function Xb(a){if("number"!==typeof a&&a&&!a.m){var b=a.src;if(b&&b[Gb])Lb(b.g,a);else{var c=a.type,d=a.g;b.removeEventListener?b.removeEventListener(c,d,a.capture):b.detachEvent?b.detachEvent(Vb(c),d):b.addListener&&b.removeListener&&b.removeListener(d);Ob--;(c=Tb(b))?(Lb(c,a),0==c.h&&(c.src=null,b[Mb]=null)):Jb(a)}}}function Vb(a){return a in Nb?Nb[a]:Nb[a]="on"+a}
function Yb(a,b,c,d){var e=!0;if(a=Tb(a))if(b=a.g[b.toString()])for(b=b.concat(),a=0;a<b.length;a++){var f=b[a];f&&f.capture==c&&!f.m&&(f=Zb(f,d),e=e&&!1!==f)}return e}function Zb(a,b){var c=a.listener,d=a.h||a.src;a.s&&Xb(a);return c.call(d,b)}
function Wb(a,b){if(a.m)return!0;if(!Ab){if(!b)a:{b=["window","event"];for(var c=l,d=0;d<b.length;d++)if(c=c[b[d]],null==c){b=null;break a}b=c}d=b;b=new V(d,this);c=!0;if(!(0>d.keyCode||void 0!=d.returnValue)){a:{var e=!1;if(0==d.keyCode)try{d.keyCode=-1;break a}catch(g){e=!0}if(e||void 0==d.returnValue)d.returnValue=!0}d=[];for(e=b.g;e;e=e.parentNode)d.push(e);a=a.type;for(e=d.length-1;0<=e;e--){b.g=d[e];var f=Yb(d[e],a,!0,b);c=c&&f}for(e=0;e<d.length;e++)b.g=d[e],f=Yb(d[e],a,!1,b),c=c&&f}return c}return Zb(a,
new V(b,this))}function Tb(a){a=a[Mb];return a instanceof Kb?a:null}var $b="__closure_events_fn_"+(1E9*Math.random()>>>0);function Rb(a){if("function"===typeof a)return a;a[$b]||(a[$b]=function(b){return a.handleEvent(b)});return a[$b]};function W(a){U.call(this);this.l=a;this.i={}}oa(W,U);var ac=[];function bc(a){ra(a.i,function(b,c){this.i.hasOwnProperty(c)&&Xb(b)},a);a.i={}}W.prototype.j=function(){W.o.j.call(this);bc(this)};W.prototype.handleEvent=function(){throw Error("EventHandler.handleEvent not implemented");};function cc(a){U.call(this);this.i=a||document.body;this.l=new W(this);a=na(yb,this.l);this.h?a():(this.g||(this.g=[]),this.g.push(a));a=this.l;var b=this.i,c=this.u,d="click";Array.isArray(d)||(d&&(ac[0]=d.toString()),d=ac);for(var e=0;e<d.length;e++){var f=Pb(b,d[e],c||a.handleEvent,!1,a.l||a);if(!f)break;a.i[f.key]=f}}h(cc,U);
cc.prototype.u=function(a){if(!(!(zb?0==a.i.button:"click"==a.type||a.i.button&Fb[0])||Sa&&a.ctrlKey||a.defaultPrevented))for(var b=a.target;b&&b!=this.i;){if(b.tagName&&"a"==b.tagName.toLowerCase()){var c=b.getAttribute("href")||b.getAttributeNS("http://www.w3.org/1999/xlink","href"),d=c;try{var e=rb(c)[3];var f;if(f="www.google.com"===pb(e,!0)){var g=rb(c)[5];f="/url"===pb(g,!0)}if(f){var k=sb(c,"q");d=k?k:sb(c,"url")}}catch(C){a:{var t=C;if(null!=t){var n=t.A;if(null!=n){C=n;break a}}if(t instanceof
TypeError){var R=n=new kb;R.l=B(t);hb(R);n.g="__noinit__";n.g=t;n.i(new TypeError(n));t=n}else R=n=new E,R.l=B(t),hb(R),n.g="__noinit__",n.g=t,n.i(Error(n)),t=n;C=t}if(!(C instanceof ib))throw C.h;}d=null!=d?d:"";if(c!=d){e=void 0;b={target:"_blank",noreferrer:!0};c=window;d instanceof q?f=d:(f="undefined"!=typeof d.href?d.href:String(d),f instanceof q||(f="object"==typeof f&&f.h?f.g():String(f),Fa.test(f)?f=new q(f,r):(f=String(f),f=f.replace(/(%0A|%0D)/g,""),f=(g=f.match(Ea))&&Da.test(g[1])?new q(f,
r):null)),f=f||Ha);d=b.target||d.target;g=[];for(e in b)switch(e){case "width":case "height":case "top":case "left":g.push(e+"="+b[e]);break;case "target":case "noopener":case "noreferrer":break;default:g.push(e+"="+(b[e]?1:0))}e=g.join(",");if((w("iPhone")&&!w("iPod")&&!w("iPad")||w("iPad")||w("iPod"))&&c.navigator&&c.navigator.standalone&&d&&"_self"!=d)e="A",g=document,e=String(e),"application/xhtml+xml"===g.contentType&&(e=e.toLowerCase()),g=e=g.createElement(e),f=f instanceof q?f:Ga(f),g.href=
u(f),e.setAttribute("target",d),b.noreferrer&&e.setAttribute("rel","noreferrer"),b=document.createEvent("MouseEvent"),b.initMouseEvent("click",!0,!0,c,1),e.dispatchEvent(b);else if(b.noreferrer){if(c=La("",c,d,e),b=u(f),c){Pa&&-1!=b.indexOf(";")&&(b="'"+b.replace(/'/g,"%27")+"'");c.opener=null;Ba.test(b)&&(-1!=b.indexOf("&")&&(b=b.replace(va,"&amp;")),-1!=b.indexOf("<")&&(b=b.replace(wa,"&lt;")),-1!=b.indexOf(">")&&(b=b.replace(xa,"&gt;")),-1!=b.indexOf('"')&&(b=b.replace(ya,"&quot;")),-1!=b.indexOf("'")&&
(b=b.replace(za,"&#39;")),-1!=b.indexOf("\x00")&&(b=b.replace(Aa,"&#0;")));b='<meta name="referrer" content="no-referrer"><meta http-equiv="refresh" content="0; url='+b+'">';if(void 0===m)if(d=null,(e=l.trustedTypes)&&e.createPolicy){try{d=e.createPolicy("goog#html",{createHTML:pa,createScript:pa,createScriptURL:pa})}catch(C){l.console&&l.console.error(C.message)}m=d}else m=d;b=(d=m)?d.createHTML(b):b;b=new x(b,null,Ka);(c=c.document)&&c.write&&(c.write(b instanceof x&&b.constructor===x?b.i:"type_error:SafeHtml"),
c.close())}}else(c=La(f,c,d,e))&&b.noopener&&(c.opener=null);a.h();break}}b=b.parentNode}};function dc(a){new cc(a)}var X=["DOCS_installLinkReferrerSanitizer"],Y=l;X[0]in Y||"undefined"==typeof Y.execScript||Y.execScript("var "+X[0]);for(var Z;X.length&&(Z=X.shift());)X.length||void 0===dc?Y[Z]&&Y[Z]!==Object.prototype[Z]?Y=Y[Z]:Y=Y[Z]={}:Y[Z]=dc;}).call(this);
</script><script type="text/javascript" nonce="">DOCS_installLinkReferrerSanitizer();</script></body></html>